부모 커밋
부모 커밋
개요
부모 커(Parent Commit)은 버전 관리 시스템, 특히 Git에서 중요한 개념 중 하나로, 특정 커밋이 생성되기 이전에 존재하던 커밋을 의미합니다. 즉, 각 커밋은 자신의 변경 사항이 기반으로 삼은 하나 이상의 이전 커밋을 부모 커밋으로 가집니다. 이 구조는 Git의 트리 기반 히스토리(commit history)를 형성하는 핵심 요소이며, 코드의 진화 과정을 추적하고 브랜치 병합(Merge) 시 충돌 해결을 가능하게 합니다.
이 문서에서는 부모 커밋의 개념, 작동 원리, 다양한 형태(단일/다중 부모), 그리고 실제 사용 사례를 중심으로 설명합니다.
부모 커밋의 기본 개념
커밋과 부모 관계
Git은 분산형 버전 관리 시스템으로, 모든 변경 사항을 커밋(Commit)이라는 단위로 저장합니다. 각 커밋은 다음과 같은 정보를 포함합니다:
예를 들어, 새로운 커밋 C3
를 만들면, 이 커밋은 이전 커밋 C2
를 부모로 지정합니다. 이는 C3
가 C2
의 상태에서 변경을 가했다는 의미입니다.
C1 ← C2 ← C3
여기서 C3
의 부모는 C2
, C2
의 부모는 C1
입니다.
부모 커밋의 종류
1. 단일 부모 커밋 (Single Parent)
가장 일반적인 형태로, 순차적 커밋(linear commit)에서 발생합니다. 브랜치를 새로 만들지 않고, 기존 브랜치에 연속적으로 커밋을 추가할 때 나타납니다.
# 예: main 브랜치에 커밋 추가
git commit -m "기능 추가"
이 경우, 새로 생성된 커밋은 단 하나의 부모를 가집니다.
2. 다중 부모 커밋 (Multiple Parents)
브랜치 병합(Merge) 시 발생합니다. 예를 들어, feature
브랜치를 main
브랜치에 병합하면, 생성된 병합 커밋(Merge Commit)은 두 개의 부모를 가집니다:
- 첫 번째 부모:
main
브랜치의 최신 커밋 (병합 대상) - 두 번째 부모:
feature
브랜치의 최신 커밋 (병합 소스)
C3 ← C4 (feature 브랜치)
/
C1 ← C2 ← C5 (병합 커밋)
↑
C5는 C2와 C4를 부모로 가짐
이 구조는 Git이 병합 이력을 정확히 추적할 수 있도록 해줍니다.
부모 커밋의 확인 방법
Git 명령어를 통해 부모 커밋 정보를 확인할 수 있습니다.
1. [git show](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B4%80%EB%A6%AC/%EB%B2%84%EC%A0%84%20%EA%B4%80%EB%A6%AC/git%20show)
명령어
특정 커밋의 메타데이터를 출력하며, 부모 커밋의 해시 값을 표시합니다.
git show --pretty=raw <커밋_해시>
출력 예:
commit abc123...
parent def456... # 첫 번째 부모
parent xyz789... # 두 번째 부모 (병합 커밋인 경우)
author ...
date ...
...
2. [git log](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B4%80%EB%A6%AC/%EB%B2%84%EC%A0%84%20%EA%B4%80%EB%A6%AC/git%20log)
명령어
히스토리를 시각화하며 부모 관계를 추적할 수 있습니다.
git log --graph --oneline --all
이 명령어는 브랜치 구조와 부모-자식 관계를 ASCII 그래프로 보여줍니다.
부모 커밋의 활용 사례
1. 코드 변경 이력 추적
부모 커밋을 통해 특정 변경이 어디에서 시작되었는지, 어떤 경로를 거쳐 현재 상태에 도달했는지를 추적할 수 있습니다.
git log --oneline <커밋>^.. # 부모 커밋부터 현재까지의 변경
2. 충돌 해결 및 리버트
병합 충돌이 발생했을 때, 두 부모 커밋을 비교하여 어떤 변경 사항이 충돌했는지 분석할 수 있습니다. 또한, 병합 커밋을 되돌릴 때는 어떤 부모를 기준으로 리버트할지 선택할 수 있습니다.
git revert -m 1 <병합_커밋> # 첫 번째 부모를 기준으로 되돌림
3. 리베이스와의 비교
리베이스(rebase
)는 기존 커밋의 부모를 변경하여 히스토리를 재구성합니다. 이는 병합과 달리 새로운 커밋을 생성하고, 부모를 변경함으로써 선형적인 히스토리를 유지하는 데 유리합니다.
참고 자료
관련 문서
부모 커밋은 Git의 분산적이고 비선형적인 버전 관리 구조를 이해하는 데 필수적인 개념입니다. 이를 정확히 파악함으로써 효과적인 협업과 코드 히스토리 관리가 가능해집니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.